
Anh Tuan
Data Science Expert

RoxyBrowser cung cấp chức năng trình duyệt thông qua các lời gọi API và có thể tích hợp với các khung phần mềm tự động hóa như Selenium, Puppeteer và Playwright. API của nó được thiết kế để bạn mở các hồ sơ trình duyệt thực tế một cách chương trình và gắn công cụ tự động hóa của bạn. API có giới hạn tốc độ được ghi chú là 100 lời gọi mỗi phút cho mỗi điểm cuối.
Nguồn: https://faq.roxybrowser.org/en/guide/10-API
CapSolver cung cấp luồng API tạo và kiểm tra kết quả trả về một mã CAPTCHA bạn có thể chèn vào trang. CapSolver hỗ trợ nhiều loại CAPTCHA:
ReCaptchaV2TaskProxyLess, trả về gRecaptchaResponseReCaptchaV3TaskProxyLess, trả về gRecaptchaResponse kèm theo điểm sốAntiTurnstileTaskProxyLess, trả về token Xem tài liệuHướng dẫn này trình bày một luồng thực tế, không phụ thuộc vào khung phần mềm: mở một hồ sơ Roxy thông qua API, gắn khung phần mềm tự động hóa của bạn, giải CAPTCHA bằng CapSolver, và chèn mã token để tiếp tục.
RoxyBrowser là trình duyệt chống phát hiện cho việc quản lý nhiều tài khoản với các tính năng như tự động hóa API và bộ đồng bộ đa cửa sổ.
Đối với tự động hóa, API là phần quan trọng nhất:
Nó hỗ trợ tích hợp với Selenium, Puppeteer và Playwright.
Các yêu cầu phải bao gồm tiêu đề token.
Host API mặc định là http://127.0.0.1:50000 (thay đổi cổng yêu cầu khởi động lại).
CapSolver giải CAPTCHA thông qua hai lời gọi API:
createTask để gửi tham số CAPTCHAgetTaskResult để kiểm tra cho đến khi token sẵn sàngĐối với reCAPTCHA v2, CapSolver trả về gRecaptchaResponse.
getTaskResult bị giới hạn ở 120 lần truy vấn cho mỗi nhiệm vụ và phải được gọi trong vòng 5 phút kể từ khi tạo nhiệm vụ.
Mặc định, host là http://127.0.0.1:50000. Nếu bạn thay đổi cổng, bạn phải khởi động lại RoxyBrowser.
Sử dụng /browser/workspace để lấy workspace, sau đó /browser/list_v3 để liệt kê hồ sơ.
import requests
BASE = "http://127.0.0.1:50000"
HEADERS = {"token": "YOUR_ROXY_API_KEY"}
workspaces = requests.get(f"{BASE}/browser/workspace", headers=HEADERS).json()
workspace_id = workspaces["data"]["rows"][0]["id"]
profiles = requests.get(
f"{BASE}/browser/list_v3",
params={"workspaceId": workspace_id},
headers=HEADERS
).json()
dir_id = profiles["data"]["rows"][0]["dirId"]
Gọi /browser/open. Trả về bao gồm:
ws: Giao diện WebSocket cho công cụ tự động hóahttp: Giao diện HTTP cho công cụ tự động hóadriver: Đường dẫn WebDriver cho tích hợp SeleniumChế độ ẩn danh không được hỗ trợ.
open_resp = requests.post(
f"{BASE}/browser/open",
json={"workspaceId": workspace_id, "dirId": dir_id, "args": []},
headers=HEADERS
).json()
ws_endpoint = open_resp["data"]["ws"]
http_endpoint = open_resp["data"]["http"]
driver_path = open_resp["data"]["driver"]
Sử dụng các điểm cuối được trả về để gắn khung phần mềm của bạn:
driver với kết nối trình gỡ lỗi.Các bước gắn kết cụ thể phụ thuộc vào khung phần mềm của bạn, nhưng các giá trị ws, http và driver được cung cấp rõ ràng cho công cụ tự động hóa.
import time
import requests
CAPSOLVER_API_KEY = "YOUR_CAPSOLVER_API_KEY"
CAPSOLVER_BASE = "https://api.capsolver.com"
def create_task(task):
payload = {"clientKey": CAPSOLVER_API_KEY, "task": task}
r = requests.post(f"{CAPSOLVER_BASE}/createTask", json=payload)
data = r.json()
if data.get("errorId", 0) != 0:
raise RuntimeError(data.get("errorDescription", "Lỗi CapSolver"))
return data["taskId"]
def get_task_result(task_id, delay=2):
while True:
time.sleep(delay)
r = requests.post(
f"{CAPSOLVER_BASE}/getTaskResult",
json={"clientKey": CAPSOLVER_API_KEY, "taskId": task_id}
)
data = r.json()
if data.get("status") == "ready":
return data["solution"]
if data.get("status") == "failed":
raise RuntimeError(data.get("errorDescription", "Nhiệm vụ thất bại"))
def solve_recaptcha_v2(website_url, website_key):
task = {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
task_id = create_task(task)
solution = get_task_result(task_id)
return solution.get("gRecaptchaResponse", "")
def solve_recaptcha_v3(website_url, website_key, page_action="verify"):
task = {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key,
"pageAction": page_action
}
task_id = create_task(task)
solution = get_task_result(task_id)
return solution.get("gRecaptchaResponse", "")
def solve_turnstile(website_url, website_key, action=None, cdata=None):
task = {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": website_url,
"websiteKey": website_key
}
# Thêm dữ liệu tùy chọn nếu có
if action or cdata:
task["metadata"] = {}
if action:
task["metadata"]["action"] = action
if cdata:
task["metadata"]["cdata"] = cdata
task_id = create_task(task)
solution = get_task_result(task_id)
return solution.get("token", "")
Tham khảo:
Mở một hồ sơ Roxy thông qua /browser/open và gắn khung phần mềm tự động hóa của bạn.
Đi đến trang đích và trích xuất khóa trang.
Ví dụ:
const siteKey = document.querySelector(".g-recaptcha")?.getAttribute("data-sitekey");
Giải bằng CapSolver sử dụng helper phía trên.
Chèn mã token và gửi biểu mẫu:
const token = "CAPSOLVER_TOKEN";
const el = document.getElementById("g-recaptcha-response");
el.style.display = "block";
el.value = token;
el.dispatchEvent(new Event("input", { bubbles: true }));
el.dispatchEvent(new Event("change", { bubbles: true }));
reCAPTCHA v3 hoạt động khác - nó chạy ở nền và trả về điểm số (0.0 đến 1.0) thay vì yêu cầu tương tác người dùng.
Trích xuất khóa trang và hành động từ trang:
// Khóa trang thường ở trong script hoặc thẻ meta
const siteKey = document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey');
// Hành động được tìm thấy trong các cuộc gọi grecaptcha.execute
// Tìm trong mã nguồn trang: grecaptcha.execute('KEY', {action: 'ACTION'})
const pageAction = "submit"; // hoặc "login", "register", v.v.
Giải bằng CapSolver:
token = solve_recaptcha_v3(
website_url="https://example.com/login",
website_key="6LcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxAA",
page_action="login"
)
Chèn mã token (giống như v2):
const token = "CAPSOLVER_TOKEN";
document.getElementById("g-recaptcha-response").value = token;
// Nếu có callback, kích hoạt nó
if (typeof ___grecaptcha_cfg !== 'undefined') {
const clients = ___grecaptcha_cfg.clients;
Object.keys(clients).forEach(key => {
if (clients[key].callback) {
clients[key].callback(token);
}
});
}
Cloudflare Turnstile là một lựa chọn CAPTCHA hiện đại, nhanh hơn để giải (1-20 giây).
Trích xuất khóa trang Turnstile:
const siteKey = document.querySelector('.cf-turnstile')?.getAttribute('data-sitekey');
// Tùy chọn: trích xuất hành động và cdata nếu có
const action = document.querySelector('.cf-turnstile')?.getAttribute('data-action');
const cdata = document.querySelector('.cf-turnstile')?.getAttribute('data-cdata');
Giải bằng CapSolver:
token = solve_turnstile(
website_url="https://example.com",
website_key="0x4AAAAAAAxxxxxxxxxxxxxxx",
action=action, // tùy chọn
cdata=cdata // tùy chọn
)
Chèn mã Turnstile:
const token = "CAPSOLVER_TURNSTILE_TOKEN";
// Tìm trường phản hồi Turnstile
const input = document.querySelector('input[name="cf-turnstile-response"]');
if (input) {
input.value = token;
input.dispatchEvent(new Event('input', { bubbles: true }));
input.dispatchEvent(new Event('change', { bubbles: true }));
}
// Phương án thay thế: một số trang sử dụng tên trường khác
const altInput = document.querySelector('input[name="turnstile-response"]');
if (altInput) {
altInput.value = token;
}
getTaskResult của CapSolver bị giới hạn ở 120 lần kiểm tra trong 5 phút.Sẵn sàng bắt đầu chưa? Đăng ký CapSolver và sử dụng mã thưởng ROXYBROWSER để nhận thêm 6% thưởng cho lần nạp đầu tiên!

RoxyBrowser có hỗ trợ Selenium, Puppeteer và Playwright không?
Có. API được thiết kế để tích hợp với các khung phần mềm này.
Tôi lấy token API và host ở đâu?
Từ API -> Cấu hình API trong RoxyBrowser. Host mặc định là http://127.0.0.1:50000.
/browser/open trả về gì?
Nó trả về các trường ws, http và driver được sử dụng bởi công cụ tự động hóa.
Chế độ ẩn danh có được hỗ trợ không?
Không, chế độ ẩn danh không được hỗ trợ.
CapSolver hỗ trợ những loại CAPTCHA nào?
CapSolver trả về token reCAPTCHA v2 như thế nào?
Tạo một nhiệm vụ với ReCaptchaV2TaskProxyLess và kiểm tra getTaskResult để lấy gRecaptchaResponse.
reCAPTCHA v3 khác reCAPTCHA v2 như thế nào?](https://www.capsolver.com/blog/reCAPTCHA/extra-parameters-recaptcha)
reCAPTCHA v3 chạy ở nền mà không cần tương tác người dùng và trả về điểm số (0.0-1.0). Nó yêu cầu tham số pageAction, có thể được tìm thấy bằng cách tìm grecaptcha.execute trong mã nguồn trang.
Làm thế nào để giải Cloudflare Turnstile?
Sử dụng loại nhiệm vụ AntiTurnstileTaskProxyLess với websiteURL và websiteKey. Tùy chọn bao gồm metadata.action và metadata.cdata nếu có trên widget. Turnstile được giải trong 1-20 giây.
Đọc thêm:
Làm thế nào để tìm khóa trang Turnstile?
Tìm thuộc tính data-sitekey trên phần tử .cf-turnstile. Khóa trang Turnstile bắt đầu bằng 0x4.
Tôi có cần proxy cho CapSolver không?
Không, các loại nhiệm vụ *ProxyLess sử dụng cơ sở dữ liệu proxy tích hợp của CapSolver. Sử dụng các phiên bản không phải ProxyLess nếu bạn cần sử dụng proxy của riêng mình.
RoxyBrowser cung cấp môi trường trình duyệt dựa trên hồ sơ với các điểm cuối tự động hóa, và CapSolver cung cấp mã token CAPTCHA chương trình. Bằng cách mở một hồ sơ Roxy, gắn khung phần mềm của bạn, và chèn mã token của CapSolver, bạn có thể xây dựng các luồng tự động hóa đáng tin cậy có khả năng xử lý CAPTCHA.
Học kiến trúc gỡ mã web Rust có thể mở rộng với reqwest, scraper, gỡ mã bất đồng bộ, gỡ mã trình duyệt không đầu, xoay proxy và xử lý CAPTCHA tuân thủ.

Tự động hóa việc giải CAPTCHA với Nanobot và CapSolver. Sử dụng Playwright để giải reCAPTCHA và Cloudflare tự động.
